Serial ATA (SATA)-compliant devices, such as SATA hard disk drives and other SATA storage devices, are widely used in the consumer personal computer (PC) industry. The SATA specification generally describes a point-to-point interface between a host computer and an ATA device. Due to the large volumes driven by the consumer PC industry, SATA drives provide large storage capabilities at decreasing prices. However, SATA drives have only a single port for connecting to a single host, and the SATA architecture only supports one host with the ATA command set. This is acceptable in consumer PC applications, which do not typically require redundant architectures. In applications, such as storage networks for server-based and storage array-based applications, that require redundant data storage and/or access, a redundant array of independent drives (RAID) and/or a SAS system can be used.
SAS systems can maintain redundant access paths to storage devices, and are widely deployed in storage networks due to their performance and reliability. The SAS standard specifies a protocol stack that provides a serial physical interconnect that can be used to connect target devices and hosts together. It specifies the transport layer protocols, transport small-computer system interface (SCSI) commands, Serial ATA tunneling and management commands used to communicate between hosts and storage devices. The protocol is intended to be used in conjunction with SCSI and ATA command sets, as it reuses the physical interface of the SATA specification.
The SAS standard defines three basic components: initiators (or hosts), expanders, and targets (or peripheral devices, such as storage devices). SAS system components can include SAS hosts, SAS expanders, SAS devices, SATA drives, SATA port selectors and SATA port multipliers. The sum of all components used in a SAS implementation is known as the SAS domain. Initiators may be provided as an on-board component of a motherboard, or through the use of an add-on host bus adapter (HBA). Expanders are part of the service delivery subsystem and facilitate communication between SAS components. Generally, SAS expanders provide switching and routing functions to the SAS system components connected to them. SAS expanders allow multiple SAS components to be connected together to form a SAS topology. By creating two independent topologies, redundant paths between the SAS system components can be created.
As noted above, a SATA drive can be considered a SAS system component, as SAS expanders are capable of converting the tunneled SATA protocol (SATA Tunneled Protocol or STP) received from a host into a SATA serial interface compatible with a SATA drive. Due to their single-ported nature, SATA drives can only be directly connected to a single SATA host. To provide multiple hosts access to a single SATA drive, the drive can be connected to a SAS expander and then be available in a SAS topology. However, when connected to a SAS expander, the SATA drive can still only respond to one host at a time, requiring the hosts to coordinate access with each other. This process is inefficient. In addition, since a SATA drive can only be connected to a single SAS expander, that single expander becomes a non-redundant point of failure.
To address this, the SAS standard supports the use of a SATA port selector in a SAS topology. The port selector can connect to a SATA drive and to two SAS expanders, but, because the SATA drive is unaware that it is being accessed by two hosts, the hosts must coordinate their communication with the SATA drive. Since the ATA command set used by SATA drives is designed for a single host, a host must complete a desired operation with the SATA drive before relinquishing the drive to the other host. In other words, the host must ensure that the SATA drive is in an idle state before the port selector changes state. The port selector state is generally controlled by either side-band or protocol-based methods. Side-band methods require one or more electrical signals to be transmitted from the hosts to the port selector. Specific events, such as a rising edge on one of the signals, communicate to the port selector that it should change state. Protocol-based methods use a pattern of out-of-band (OOB) events to communicate a state change. SATA port selectors allow 2 hosts to share access to a SATA drive. However, SATA port selector only provides hosts with alternating, but still exclusive, access to the SATA drive. Storage applications are efficient if hosts are able to issue commands in close succession, and have the target receive and respond to those commands in a timely manner. While the use of SATA port selectors provides alternating access and redundancy, they do not provide concurrent access for multiple hosts and therefore detrimentally affects the system performance as it is wasteful of resources.
In addition to their single port limitation, SATA drives did not originally support command queuing, while SAS devices support Tagged Command Queuing. The SATA II specification extended the original SATA specification by defining a simple and streamlined command queuing model for SATA drives. This Native Command Queuing (NCQ) increases performance of SATA drives by allowing the individual device to receive more than one request at a time and decide which to complete first. For example, using detailed knowledge of its own seek times and rotational position, a SATA hard disk drive can compute the best order in which to perform input/output (I/O) operations. This can reduce the amount of unnecessary seeking of the drive's heads, resulting in increased performance and decreased wear, particularly for server-type applications where multiple simultaneous read/write requests are often outstanding. The SATA II specification provides a mechanism to identify these commands by a queue tag in a manner that is compatible with the original SATA specification. However, NCQ commands must still be issued as a contiguous series of frames to and from the target. This poses a problem for two hosts independently seeking access to a SATA drive.
Relying upon hosts to coordinate access to a single device causes difficulties on a number of levels. On one level, it removes the transparency of conventional SAS topologies, and requires that hosts interact with each other to coordinate drive access in real time. In a simple configuration, this may be possible, but causes problems if more than two hosts contend for a single SATA drive. Multiple hosts attempting to gain exclusive access to a single SATA target will experience long wait times for each request, which would not happen if they had simultaneous access. Further delays are caused during the switch over event as control of the drive passes from one host to another. These factors detrimentally impact system performance. On another level, coordination may require that hosts have knowledge of the configuration of a device, and base their access to the device on that knowledge. This makes replacing the drive with another device more difficult at a later date. As well, the coordination must handle error conditions such as when the device owner fails and/or disappears unexpectedly.
Therefore, it is desirable to provide a means within a SAS topology to permit multiple initiator access to a SATA drive without host interaction or contention issues.